package tree;

import java.lang.reflect.Array;

public class ArrBinaryTreeDemo {
	public static void main(String[] args) {
		int[] array = {1, 2, 3, 4, 5, 6, 7};
		//创建一个 tree
		ArrBinaryTree arrBinaryTree = new ArrBinaryTree(array);
		arrBinaryTree.postOrder(0);
	}

}

//实现顺序存储二叉树的遍历
class ArrBinaryTree {
	private int[] array;//存储数据节点的数组

	public ArrBinaryTree(int[] array) {
		this.array = array;
	}

	//编写方法，完成顺序存储二叉数的前序遍历
	public void preOrder(int index) {
		//如果数组为空，或者没数据
		if (array == null || array.length == 0) {
			System.out.println("为空");
		}
		//输出当前元素
		System.out.print(array[index] + ",");
		//向左递归
		if ((2 * index + 1) < array.length) {
			preOrder(2 * index + 1);
		}
		//向右递归
		if ((2 * index + 2) < array.length) {
			preOrder(2 * index + 2);
		}
	}

	//中序遍历
	public void infixOrder(int index) {
		//如果数组为空，或者没数据
		if (array == null || array.length == 0) {
			System.out.println("为空");
		}
		//向左递归
		if ((2 * index + 1) < array.length) {
			infixOrder(2 * index + 1);
		}
		//输出当前元素
		System.out.print(array[index] + ",");

		//向右递归
		if ((2 * index + 2) < array.length) {
			infixOrder(2 * index + 2);
		}
	}

	//编写方法，完成顺序存储二叉数的前序遍历
	public void postOrder(int index) {
		//如果数组为空，或者没数据
		if (array == null || array.length == 0) {
			System.out.println("为空");
		}
		//向左递归
		if ((2 * index + 1) < array.length) {
			postOrder(2 * index + 1);
		}
		//向右递归
		if ((2 * index + 2) < array.length) {
			postOrder(2 * index + 2);
		}
		//输出当前元素
		System.out.print(array[index] + ",");
	}
}
